﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using ABC_SA_DM;
using System.Diagnostics;

namespace ABC_SA_DAL
{
    public class Paquete_DAL
    {
        public bool crearPaquete(Paquete p)
        {
            //Se agrega el paquete nuevo a la BD            
            string sql = "EXEC sp_InsertarPaquete '" + p.nombreSG + "', " + p.estadoSG + ",'" + Convert.ToDateTime(p.fechaInicioSG).ToShortDateString() + "','" + Convert.ToDateTime(p.fechaFinalSG).ToShortDateString() + "','" + p.descripcionSG + "'," + p.precioSG + ";";

            return DBComma.nonSQLCommandEjecutar(sql);
        }

        public bool eliminarPaquete(int idPaquete)
        {
            //Se elimina el paquete de la BD         
            string sql = "EXEC sp_EliminarPaquete " + idPaquete + ";";

            return DBComma.nonSQLCommandEjecutar(sql);
        }

        public Paquete consultaPaquete(int idPaquete)
        {
            //Se consulta un paquete en la BD
            string sql = "EXEC sp_ConsultaPaquete " + idPaquete + ";";

            Conexion conecta = new Conexion(); 
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand(sql, conn);
            SqlDataReader reader = comando.ExecuteReader();
           
            Paquete paqConsultado = new Paquete();
            try
            {
                if(reader.Read())
                {
                    paqConsultado.idSG = Convert.ToInt32(reader.GetValue(0));
                    paqConsultado.nombreSG = Convert.ToString(reader.GetValue(1));
                    paqConsultado.estadoSG = Convert.ToInt32(reader.GetValue(2));
                    paqConsultado.descripcionSG =  Convert.ToString(reader.GetValue(5));
                    paqConsultado.precioSG = Convert.ToInt32(reader.GetValue(6));

                    //Manejo de fechas para mostrarlas de la forma esperada
                    string FI = Convert.ToString(reader.GetValue(3));
                    FI =  Convert.ToDateTime(FI).ToShortDateString();
                    paqConsultado.fechaInicioSG = FI;

                    string FF = Convert.ToString(reader.GetValue(4));
                    FF = Convert.ToDateTime(FF).ToShortDateString();
                    paqConsultado.fechaFinalSG = FF;
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }
            conn.Close();

            return paqConsultado;
        }

        public bool modificarPaquete(Paquete p)
        {
            //Se agrega el paquete nuevo a la BD            
            string sql = "EXEC sp_InsertarPaquete '" + p.nombreSG + "', " + p.estadoSG + ",'" + Convert.ToDateTime(p.fechaInicioSG).ToShortDateString() + "','" + Convert.ToDateTime(p.fechaFinalSG).ToShortDateString() + "','" + p.descripcionSG + "'," + p.precioSG + "," + p.idSG + ";";

            return DBComma.nonSQLCommandEjecutar(sql);
        }

        public List<Paquete> consultaListaPaquetesInfo()
        {
            // Consulta toda la lista de paquetes
            List<Paquete> ListaP = new List<Paquete>();

            string sql = "EXEC sp_ConsultaPaquete;";

            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand(sql, conn);
            SqlDataReader reader = comando.ExecuteReader();

            try
            {
                while (reader.Read())
                {
                    Paquete paq = new Paquete();
                    paq.idSG = Convert.ToInt32(reader.GetValue(0));         // ID PAQUETE
                    paq.nombreSG = Convert.ToString(reader.GetValue(1));
                    paq.estadoSG = Convert.ToInt32(reader.GetValue(2));
                    paq.fechaInicioSG = Convert.ToString(reader.GetValue(3)).Substring(0,10);
                    paq.fechaFinalSG = Convert.ToString(reader.GetValue(4)).Substring(0,10);
                    paq.descripcionSG = Convert.ToString(reader.GetValue(5));
                    paq.precioSG = Convert.ToInt32(reader.GetValue(6));
                    
                    ListaP.Add(paq);
                }
            }
            catch (Exception e)
            {
                Console.Write(e);
            }

            conn.Close();

            return ListaP;
        }

        public int consultasConNombre(string nRegistro, int Pass)
        {   

            //Se consulta un registro en la BD por su nombre y retorna el ID
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();
            SqlCommand comando = new SqlCommand();

            comando.CommandText = "EXEC sp_ConsultaConNombre '" + nRegistro + "'," + Pass + ";";

            comando.CommandType = System.Data.CommandType.Text;
            comando.Connection = conn;
            SqlDataReader reader = comando.ExecuteReader();

            int destConsultado = 0;

            if (reader.Read())
            {
                destConsultado = Convert.ToInt32(reader.GetValue(0));
            }
            conn.Close();

            return destConsultado;
        } 

        public bool relPaqueteDestino(int idPaquete, List<string> Destinos)
        {
            string sql = "";

            // Se recorre la lista de nombres de destino y se le agrega al comando una linea por cada insercion
            for (int i = 0; i < Destinos.Count; i++)
            {
                sql += "EXEC sp_DestinoPaquete " + idPaquete + "," + consultasConNombre(Destinos.ElementAt(i), 2) + ";";
            }

            return DBComma.nonSQLCommandEjecutar(sql);

        }

        public bool relPaqueteServicio(int idPaquete, List<string> Servicios)
        {

            string sql = "";
            
            // Se recorre la lista de nombres de servicios y se le agrega al comando una linea por cada insercion
            for (int i = 0; i < Servicios.Count; i++)
            {
                // Pass define si lo que se quiere consultar en "servicioPorNombre" es el id o el monto der servicio
                sql += "EXEC sp_ServicioPaquete " + idPaquete + "," + consultasConNombre(Servicios.ElementAt(i), 0) + ";";

                // Se obtiene el paquete y se modifica su monto
                Paquete paqAModificar = consultaPaquete(idPaquete);
                paqAModificar.precioSG += consultasConNombre(Servicios.ElementAt(i), 1);

                //Actualiza los datos (el monto) del paquete
                modificarPaquete(paqAModificar);
            }

            return DBComma.nonSQLCommandEjecutar(sql);
        }

    }
}
